import 'dart:convert';
import '../services/Storage.dart';

// 购物车增、减、删
class CartServices{
  /*
   * 1、获取本地存储的cartList数据
   * 2、判断cartList是否有数据
   *    有数据:
   *        1、判断购物车有没有当前数据：
   *              有当前数据：
   *                    1、让购物车中的当前数据量 等于以前的数量 = 现在的数量
   *                    2、 重新写入本地存储
   *               没有当前数据：
   *                    1、把购物车cartList的数据和当前的数据进行拼接，拼接后重新写入本地存储
   *      没有数据：
   *          1、把当前商品数据以及属性数据放在数组中然后写入本地存储
   */

  static addCart(item,checkedAttr, count) async {
    item = CartServices.formatCartData(item,checkedAttr, count);

    try{
      // 1、获取本地存储的cartList数据
      List cartListData = json.decode(await Storage.getString('cartList'));

      // 2、判断cartList是否有数据
      bool hasData = cartListData.any((value){
        return value['_id'] == item['_id'] && value['selectedAttr'] == item['selectedAttr'];
      });

      if(hasData){   //  hasData == true: 有当前数据
          //  1、让购物车中的当前数据量 等于以前的数量 = 现在的数量
          for(var i=0; i<cartListData.length; i++){
            if(cartListData[i]['_id'] == item['_id'] && cartListData[i]['selectedAttr'] == item['selectedAttr']){
              cartListData[i] = item;
            }
          }
          //  2、重新写入本地存储
          await Storage.setString('cartList', json.encode(cartListData));

      } else {   // hasData == false: 没有当前数据
          //  1、把购物车cartList的数据和当前的数据进行拼接，拼接后重新写入本地存储
          cartListData.add(item);
          await Storage.setString('cartList', json.encode(cartListData));
      }

    }catch(err){
      // 没有数据：
      //    1、把当前商品数据以及属性数据放在数组中然后写入本地存储
      List tempList = [];
      tempList.add(item);
      await Storage.setString('cartList', json.encode(tempList));
    }
  }

  // 过滤数据
  static formatCartData(item,checkedAttr, count){
    final Map data = new Map();
    data['_id'] = item['_id'];
    data['title'] = item['title'];

    if (item['price'] is int || item['price'] is double){
      data['price'] = item['price'];
    }else {
      // 如果item['price']不是整数或小数，就是字符串，将其转化成小数
      data['price'] = double.parse(item['price']);
    }

    data['selectedAttr'] = checkedAttr;
    data['count'] = count;
    data['pic'] = item['pic'];

    //是否选中
    data['checked'] = true;
    return data;
  }

}